#pragma once
#include "crypto/padding/Padding.h"
#include "array/Arrays.h"
#include "lang/System.h"

namespace yzrilyzr_crypto{
	ECLASS(NoPadding, public Padding){
	public:
	NoPadding()=default;
	yzrilyzr_array::ByteArray padding(const yzrilyzr_array::ByteArray & in,
										u_index off,
										u_index len,
										u_index paddingLen) override{
		if(in.length != len || off > 0){
			thread_local std::shared_ptr<yzrilyzr_array::ByteArray> n;
			n=std::make_shared<yzrilyzr_array::ByteArray>(len);
			yzrilyzr_lang::System::arraycopy(in, off, *n, 0, len);
			return *n;
		}
		return const_cast<yzrilyzr_array::ByteArray &>(in);
	}

	u_index unpadding(const yzrilyzr_array::ByteArray & in) override{
		return in.length;
	}
	};
}